/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package jforum.domain;

import java.sql.ResultSet;
import java.text.SimpleDateFormat;
import java.util.Map;
import java.util.Arrays;
import java.util.Date;
import java.util.HashMap;

/**
 *
 * @author Вадим
 */
public class User extends Entity {

    public String login;
    private String pass;
    public Date reg_time;
    public String email;
    public String act_key;
    public short active;
    public String secure;
    public int msg_count;
    public String avatar;
    public int rights;

    private SimpleDateFormat sdf=new SimpleDateFormat("dd MMMM yyyy, HH:mm");

    public User(int id) {
        super.ID = id;
    }

    public User(int id, String login) {
        this(id);
        this.login=login;
        this.active = 0;
        this.rights = 0;
    }

    public User(int id,String login,String pass) {
        this(id,login);
        this.pass =pass;
    }

    public User(int id,String login,String pass, String email) {
        this(id,login,pass);
        this.email=email;
    }

    public User(int id, String login, String pass, long reg_time, String email,
            String act_key, short active, String secure, int msg_count, String avatar, int rights) {
        this(id,login,pass);
        this.reg_time=new Date(reg_time);
        this.email=email;
        this.act_key=act_key;
        this.active=active;
        this.secure=secure;
        this.msg_count=msg_count;
        this.avatar=avatar;
        this.rights=rights;
    }

    public boolean isPasswordCorrect(char[] input) {
        boolean isCorrect = true;
        char[] correctPassword=new char[this.pass.length()];
        this.pass.getChars(0, this.pass.length(),correctPassword, 0);

        if (input.length != correctPassword.length) {
            isCorrect = false;
        } else {
            isCorrect = Arrays.equals (input, correctPassword);
        }

        //Zero out the password.
        Arrays.fill(correctPassword,'0');
        return isCorrect;
    }

    @Override
    public String toString() {
        return this.login;
    }

    public String getLogin() {
        return this.login;
    }

    public String getPass() {
        return this.pass;
    }

    public Date getReg_time() {
        return reg_time;
    }

    /**
     * Возвращает время в виде строки в понятном формате
     * @return
     */
    public String getTime() {
        return sdf.format(reg_time);
    }

    public String getEmail() {
        return this.email;
    }

    /**
     *  права на чтение форума
     */
    public boolean getReadRights() {
        if (rights % 2 == 1) return true;
        return false;
    }

    /**
     *  права на оставление сообщений
     */
    public boolean getPostRights() {
        if ( (rights / 2) % 2 == 1) return true;
        return false;
    }

    /**
     *  права на создание сообщений - веток
     */
    public boolean getCreateRights() {
        if ( (rights / 4) % 2 == 1) return true;
        return false;
    }

    /**
     *  права на редактирование, удаление сообщений (модератор)
     */
    public boolean getModerRights() {
        if ( (rights / 8) % 2 == 1) return true;
        return false;
    }

    /**
     *  права на бан, редактирование прав (админ)
     */
    public boolean getAdminRights() {
        if ( (rights /16 ) % 2 == 1) return true;
        return false;
    }



    @Override
    public Map getPropertyMap() {
        Map map = new HashMap();

        map.put("ID",super.ID);
        map.put("login", this.login);
        map.put("pass", this.pass);

        return map;
    }

}
